Skip to content

e2e: add multi-node rollout test on EKS - #240

Open
ptalgulk01 wants to merge 2 commits into
bootc-dev:mainfrom
ptalgulk01:scale-test-multi-node
Open

ptalgulk01 wants to merge 2 commits into
bootc-dev:mainfrom
ptalgulk01:scale-test-multi-node

Conversation

@ptalgulk01

@ptalgulk01 ptalgulk01 commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Coverage so far only exercises a single node per pool, so staged rollout across a fleet has never been tested. TestMidRolloutImageChange does provision two nodes, but it runs on bink only.

TestMultiNodeRollout provisions three nodes in one pool, rolls the pool to a new image, and asserts every node boots the new digest and the pool reports all nodes updated. It declares both bink and eks; the GitHub runners cannot host three nodes, so in practice this provides coverage on EKS.

maxUnavailable is asserted inside the same polling loop that waits for convergence, so the invariant is sampled throughout the rollout. Asserting it once up front would pass trivially, as UpdatingCount is zero before the rollout starts. A violation aborts immediately instead of retrying, which would let a later poll mask it.

A node that stays Degraded past a grace period aborts the wait and reports the daemon's own error. Degraded is cleared on the next successful reconcile, so a retried transient error must not fail the test; without the early abort, a failure such as an unauthorized registry pull surfaced only as an opaque matcher timeout minutes later.

Each node's daemon pod is also checked for Running before waiting for Idle, so a pod stuck in ImagePullBackOff is named directly.

@ptalgulk01
ptalgulk01 force-pushed the scale-test-multi-node branch from 1c34f6a to 1d6aa4e Compare October 19, 2026 13:25
Comment thread test/e2e/bootcnode_test.go Outdated
// cannot afford enough memory/CPU for multi-node scale testing.
func TestMultiNodeRollout(t *testing.T) {
e2eutil.Providers(t, "bink", "eks")
t.Parallel()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it will be better to run this serially for the resource contention in bink


// Verify the daemon pod actually reaches Running on every node before
// waiting for Idle - a pod stuck in e.g. ImagePullBackOff would
// otherwise just show up as a confusing Idle-wait timeout below.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good check, probably we could generalize in a function and add the check to the other tests as well, in this way we fail fast. But not for this PR

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed — I'll generalize the daemon-pod Running check into a helper and wire it into the other tests in a follow-up PR, so failures surface fast everywhere.

@alicefr

alicefr commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

It looks good :)

@alicefr

alicefr commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

@ptalgulk01 I think you need to increase the timeout for the overall tests

Signed-off-by: Prachiti Talgulkar <ptalgulk01@users.noreply.github.com>
@ptalgulk01
ptalgulk01 force-pushed the scale-test-multi-node branch from 1d6aa4e to 3c15272 Compare October 21, 2026 12:45
@alicefr

alicefr commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

@ptalgulk01 there is a missing signed-off and also please use the tag Assisted-by: AI

TestMultiNodeRollout takes ~24 min on the bink runners, pushing the
full suite past the previous 60m budget (k8s 1.35 died with
panic: test timed out after 1h0m0s while two tests were still in
flight). On EKS the suite now provisions five EC2 nodes across three
tests, which does not reliably fit the old 30m either.

e2e: 60m -> 90m, e2e-eks: 30m -> 60m.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Signed-off-by: Prachiti Talgulkar <ptalgulk01@users.noreply.github.com>
@ptalgulk01
ptalgulk01 force-pushed the scale-test-multi-node branch from 3c15272 to 75b6808 Compare October 22, 2026 13:19

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants